이더리움(Ethereum)과 스마트 컨트랙트(smart contract)
이더리움(Ethreum)은 2013년 말, 암호화 화폐(cryptocurrency) 연구자이자 프로그래머인 비탈릭 뷰테린(Vitalik Buterin)에 의해 처음 제안되었고 2014년 7~8월 개발자금 모집을 위한 온라인 크라우드 펀딩 후 2015년 7월 30일 최초로 작동하기 시작했다. 프론티어(Frontier), 홈스테드(Homestead), 메트로폴리스(Metropolis), 세레니티(Serenity)의 4단계를 통해 개발을 완료하고자 하는 로드맵을 가지고 있으며 현재 홈스테드 단계에 있다.
1. 이더리움(Ethereum)이란?
이더리움이란 비트코인의 스크립트 언어를 튜링 완전한(Turing-complete) 프로그래밍 언어로 확장함으로써 단순한 가치의 저장 및 전달 기능 이외에도 복잡하고 다양한 계약조건을 블록체인 상에서 구현하는 것을 목적으로 하는 분산 컴퓨팅 플랫폼이다. 이더리움은 세계 컴퓨터(world computer)라 불리곤 하는데 이는 전 세계에 이더리움 프로토콜을 구현하고 있는 약 23,000개의 노드(node)가 모두 동일한 데이터베이스를 저장하고 있으며 동일한 소프트웨어를 돌리고 있기 때문이다. 이와 같이 블록체인은 저장공간과 연산의 높은 중복성(redundancy)을 통해 데이터의 비가역성(immutability)과 보안(security)을 확보하는 시스템이다. 이더리움 블록체인 상에는 스마트 컨트랙트(smart contract)가 존재하는데 스마트 컨트랙트란 특정 계약의 내용을 구현한 컴퓨터 코드(code)로서 계약의 조건을 만족시키게 되면 모든 이더리움 노드에서 무조건적으로 실행되는 코드를 말한다. 특정 계약조건을 만족시키면 무조건적으로 실행이 되기 때문에 막을 수 없는(unstoppable) 계약이라 불리기도 하며 이더리움 플랫폼의 핵심이라 할 수 있다.
2. 스마트 컨트랙트(smart contract)와 분산 어플리케이션
2.1. 스마트 컨트랙트(smart contract)
위에서 언급했다시피 스마트 컨트랙트란 다양한 계약조건을 구현하여 특정 계약조건을 충족시키면 무조건적으로 코드가 실행되도록 하는 블록체인 상의 계약이다. 예를 들어 비트코인의 경우에는 단순히 "A가 B에게 3BTC을 보낸다"라는 간단한 가치의 전달 계약을 실행시킨다면 이더리움은 튜링 완전한(Turing-complete) 스마트 컨트랙트 언어를 사용하여 "크라우드 펀딩을 통해 300이더(ether) 이상의 금액이 모이면 A, B에게 그 금액의 50%를 각각 지급한다"와 같은 복잡한 내용도 블록체인에 기록하여 중개인 없이 자동으로 실행시킬 수 있다. 혹은 오라클(oracle)을 사용하며 외부의 정보를 바탕으로 좀 더 다양한 계약조건을 설정할 수도 있다. 예를 들어 예측시장(prediction market)의 경우 "도널드 트럼프 미 대통령이 임기를 마치기 전에 탄핵당하면 A에게 50이더, 탄핵 당하지 않으면 B에게 50이더를 지급"하는 스마트 컨트랙트 또한 이더리움 플랫폼 상에서 구현할 수 있다.
모든 이더리움 스마트 컨트랙트는 이더리움 블록체인상에 기록되어 있어 계약의 조건을 만족시키는 경우가 아니면 그 누구도 계약내용을 바꾸지 못한다. 반면 계약조건을 만족시키는 경우에는 1. 무조건적이고 2. 자동적으로 계약이 실행되기 때문에 기존에 계약의 이행을 강제했던 중개인(intermediary) 없이 계약이 객관적이고 효율적으로 이루어질 수 있게 된다. 이더리움은 튜링 완전한 스마트 컨트랙트 언어를 사용하기 때문에 우리가 평소에 사용하던 많은 계약들의 내용을 컴퓨터 코드로 구현하여 계약의 효율성과 신뢰성을 높일 수 있다.
예를 들어 "미래의 시점 A에서 B라는 자산을 C라는 가격에 D만큼의 양을 구입하는" 선물(futures) 계약을 생각해보자. 선물 및 옵션(options)과 같은 파생상품(derivatives)을 거래하게 되면 거래소를 통하거나 장외시장(OTC: Over the Counter)을 통해 거래 상대방과 계약을 맺게 된다. 이 때 크게 두 가지 리스크가 존재하는데 첫째는 거래 상대방 리스크(counter-party risk)로서 거래 상대방이 의도적으로 계약을 이행하지 않거나 이행할 여력이 없게 되는 경우이고 두 번째는 중개인(intermediary) 리스크로서 거래를 중개하는 기관 혹은 개인이 해킹을 당하거나 잠적할 경우 쌍방간 객관적으로 계약의 체결을 확인하고 이를 강제하기가 어려울 수 있다는 것이다. 이러한 리스크를 줄이기 위해 거래 당사자들은 예치금(deposit)을 맡기거나 다양한 법률적 장치들을 활용하게 되는데 이는 고스란히 거래비용의 증가로 이어진다. 만약 선물거래를 스마트 컨트랙트로 구현하게 되면 중개인 없이 블록체인에 기록된 컴퓨터 코드에 의해 자동으로 계약이 실행되기 때문에 거래 상대방 리스크와 중개인 리스크 없이 공정하게 계약이 이행될 수 있으며 비용도 크게 감소한다. 추가적으로 스마트 컨트랙트를 사용하면 디지털 상에서 모든 계약이 이루어지기 때문에 국경과 상관없이 누구나 전 세계의 다양한 파생상품에 투자할 수 있게 된다.
금융은 블록체인과 스마트 컨트랙트의 응용 가능성 측면에서 가장 많은 주목을 받는 분야이긴 하지만 금융 이외에도 정부행정, 인터넷 서비스, IoT, 의료, 예술 및 엔터테이먼트에 이르기까지 다양한 분야에서 스마트 컨트랙트의 개념이 적용될 수 있다. 이와 더불어 스마트 컨트랙트의 개념을 확장시켜 이를 바탕으로 서비스 전체를 분산화, 자동화시키려는 시도가 있는데 이는 분산 어플리케이션(dapp: decentralized applications)을 통해 이루어진다.
2.2. 분산 어플리케이션(dapp: decentralized applications)
분산 어플리케이션이란 중앙화된 어플리케이션 서버가 아닌 분산화된 방식으로 서비스를 제공하는 어플리케이션을 일반적으로 칭한다. 예를 들어 현재 매달 1억 7000만명이 사용하는 비트토렌트(bitTorrent)는 "파일 저장 및 공유" 서비스를 제공하는 분산 어플리케이션이다. 참가자들이 파일을 분산화시켜 저장하고 특정 파일이 필요한 사용자는 네트워크에 요청하여 다수의 참가자로부터 파일의 조각들을 받아 이들을 조합하여 원본 파일을 만들어내게 된다. 비트코인(Bitcoin)은 화폐(currency)가 제공하는 "가치의 저장, 가치의 척도, 가치의 교환"의 서비스를 제공하는 분산 어플리케이션이다. 중앙은행에서 발행되는 화폐와는 달리 그 어떤 중앙기관도 비트코인을 통제하지 않으며 네트워크 참가자들의 합의(consensus)를 통해 화폐가 발행되고 유통된다. 발행량을 비롯한 화폐 시스템에서의 중요한 의사결정 모두 분산화된 합의를 통해서 이루어진다.
이더리움을 포함한 다양한 블록체인 플랫폼 상에서 스마트 컨트랙트를 바탕으로 한 금융, 정부행정, 인터넷, 예측시장, 의료, 예술 및 엔터테이먼트 등의 다양한 분야에서 많은 수의 분산 어플리케이션이 개발되고 있다. 아마존 웹 서비스(AWS), 구글 클라우드 플랫폼, 마이크로소프트 애저(Azure) 등이 각축을 벌이고 있는 클라우드 컴퓨팅 서비스를 분산화된 방식으로 개발하려고 하는 골렘(Golem), 스토지(Storj), 파일코인(Filecoin) 등은 분산화된 방식으로 연산력을 제공하거나 데이터 저장 서비스를 제공하는 분산 어플리케이션이다.
3. 이더리움의 구조
이더리움은 다음과 같은 구조로 이루어져 있다.
- 이더리움의 상태(state)를 저장하는 이더리움 블록체인(blockchain)
- 스마트 컨트랙트를 실행시키는 이더리움 가상머신(EVM: Ethereum Virtual Machine)
- 스마트 컨트랙트의 내용을 작성할 수 있는 스마트 컨트랙트 언어인 솔리디티(Solidity)와 바이퍼(Viper) 등
- 이더리움 블록체인 상의 거래 및 계약 데이터를 업데이트해나가는 합의 알고리즘(consensus algorithm)
- 이더리움 스마트 컨트랙트를 실행시키기 위해 필요한 가스(gas)와 이더리움의 토큰인 이더(ether)
3.1. 이더리움 블록체인(blockchain)
이더리움 블록체인은 비트코인 블록체인과 마찬가지로 블록의 체인 형태로 구성되어 있는 분산 데이터베이스이다. 비트코인 블록체인이 단순한 거래의 내역만을 저장하는 데이터베이스라면 이더리움 블록체인은 거래(transaction) 내역뿐 아니라 스마트 컨트랙트의 상태에 대한 정보까지 담고 있는 보다 확장된 데이터베이스이다. 이더리움 블록체인은 분산 데이터베이스로서 네트워크에 참가하는 노드(node)들은 모두 동일한 블록체인을 보유하며 합의(consensus) 알고리즘을 통해 블록체인에 기록된 내용을 업데이트해나간다. 예를 들어 A가 B가 스마트 컨트랙트를 통해 금융계약을 체결하고 이를 이더리움 네트워크에 전파(propagate)하면 이더리움 상의 모든 노드들은 해당 계약의 내용을 블록체인에 기록하고 이를 실행한 후 블록체인의 상태를 업데이트하게 된다.
현재 이더리움 블록은 평균 22초에 하나씩 생성되고 있으며 비트코인과 마찬가지로 작업증명(PoW) 방식의 합의 알고리즘을 채택하고 있어 그래픽카드(GPU)를 사용하여 연산을 시행하는 채굴자에 의해 채굴되고 있다.
3.2. 이더리움 가상머신(EVM: Ethereum Virtual Machine)
이더리움 가상머신(EVM)은 이더리움 상에서 스마트 컨트랙트가 동작할 수 있는 환경으로서 누구나 EVM 바이트코드(bytecode)를 실행시킬 수 있도록 하는 튜링 완전한(Turing-complete) 256비트의 가상머신이다. 솔리디티(Solidity)와 같은 스마트 컨트랙트 언어로 작성된 스마트 컨트랙트는 컴파일러(compiler)를 통해 EVM 바이트코드로 컴파일된다. 이후 컴파일된 코드는 이더리움 가상머신을 통해 실행되며 해당 계약의 내용이 블록체인에 업데이트된다.
이더리움 블록체인은 모든 이더리움 노드가 공유하는 데이터베이스이므로 블록체인 상에 데이터를 기록할 수 있는 저장공간 및 스마트 컨트랙트를 실행시킬 수 있는 연산은 모든 이가 공유하는 자원이다. 따라서 이더리움 가상머신에서 연산을 하기 위해서는 일정량의 비용이 필요한데 연산력의 단위는 가스(gas)이며 이더리움의 토큰인 이더(ether)를 통해서 가스를 구입할 수 있다.
3.3. 스마트 컨트랙트 언어(smart contract language)
이더리움의 가장 큰 특징 중 하나는 튜링 완전한(Turing complete) 스마트 컨트랙트 언어를 사용한다는 것이다. 단순한 거래의 실행에 대한 조건을 나타내는 비트코인의 스크립트 언어와는 달리 이더리움의 스마트 컨트랙트 언어는 튜링 완전하기 때문에 대부분의 일반적인 계약의 내용들을 구현할 수 있다. 가장 널리 사용되는 이더리움 스마트 컨트랙트 언어는 자바스크립트(JavaScript)와 비슷한 문법을 지니고 있는 솔리디티(Solidity)가 있다.
하지만 튜링 완전한 언어는 다양하고 복잡한 계약조건을 구현할 수 있는 반면 그 복잡성으로 인해 버그가 발생할 확률 또한 높다. 특히 블록체인 상에서 큰 규모의 자금을 보유하고 있는 스마트 컨트랙트의 경우 단 하나의 버그도 치명적일 수 있다. 실제로 2016년 6월 크라우드 펀딩으로 약 1억 5,000만달러 이상의 자금을 모집했던 the DAO(Decentralized Autonomous Organization)의 스마트 컨트랙트 코드의 버그를 통해 해커가 약 5,000만달러의 금액을 탈취한 사건이 있었고 2017년 7월에는 이더리움 클라이언트(client)이자 지갑 소프트웨어인 Parity의 다중서명지갑의 스마트 컨트랙 상의 버그로 인해 해커가 약 3,200만 달러 규모의 이더를 탈취한 사건이 있었다. 이러한 스마트 컨트랙트의 버그 가능성을 줄이고자 이더리움의 창시자인 비탈릭 뷰테린에 의해 새로운 스마트 컨트랙트 언어인 바이퍼(Viper)가 개발 중에 있다. 바이퍼는 기존의 스마트 컨트랙트 언어들의 단점을 보완하고 스마트 컨트랙트의 행동을 예측가능하고 이해하기 쉽게 만들어 오류 가능성을 줄이는 것을 주요 목적으로 한다.
3.4. 합의 알고리즘(consensus algorithm)
블록체인의 합의 알고리즘이란 다양한 블록체인들 중 어느 블록체인이 유효(valid)하며 옳은(canonical) 것인지를 결정하는 알고리즘이다. 현재 이더리움은 그래픽 카드(GPU)를 사용한 채굴에 기반한 작업증명(PoW) 방식의 합의 알고리즘을 택하고 있다. 작업증명이란 해시(hash)함수에 기반한 특정 연산작업을 가장 많이 한 참가자에게 연산력에 비례하여 블록체인에 블록을 추가시킬 권한을 부여하는 합의 알고리즘이다. 하지만 작업증명의 경우 1. 지나치게 많은 양의 에너지가 소모되며 2. 채굴에 필요한 장비가 고도화되어 채굴이 중앙화(centralize)되어 3. 보안이 약해질 수 있다라는 단점이 제기되고 있다. 따라서 이더리움은 이러한 작업증명 방식의 합의 알고리즘을 대체하여 캐스퍼(Casper)라 불리는 지분증명(PoS: Proof of Stake) 방식의 합의 알고리즘으로의 전환을 계획하고 있다. 작업증명이 연산력에 비례하여 블록을 추가시킬 권한을 부여한다면 지분증명은 자신이 보유하고 있는 자산의 양에 비례하여 블록을 추가시킬 권한을 부여하는 합의 방식이다. 블록을 추가시키기 위해 작업증명과 같이 많은 양의 연산을 할 필요가 없어 에너지 소모가 거의 없는 장점이 있으며 작업증명에 비해 향상된 보안성을 제공할 수 있는 잠재력이 있으나 그 실효성에 대한 의문이 제기되기도 한다. 이더리움은 일차적으로는 작업증명과 지분증명이 혼합(hybrid)된 방식을 통해 단계적으로 지분증명의 합의방식으로의 전환을 계획하고 있다.
3.5. 이더(ether)와 가스(gas)
이더리움의 스마트 컨트랙트는 모든 참가자가 공유하는 이더리움 가상머신(EVM)을 통해 기록 및 실행된다. 이 때 스마트 컨트랙트를 기록하고 실행하기 위해서는 EVM의 연산력을 사용해야 하는데 이 때 소모되는 연산력의 단위가 바로 가스(gas)이다. 가스가 필요한 이유는 다음과 같이 크게 2가지가 있다.
- 튜링 완전한 코드는 정지문제(halting problem)가 있다. 정지문제란 "튜링 완전한 알고리즘에 특정 입력값을 넣었을때 해당 알고리즘이 종료될지 종료되지 않고 계속해서 연산을 수행해나갈지를 판정할 수 없다"는 것이다. 따라서 우리는 해당 컨트랙트를 실행시켜보기 전까지는 이더리움 가상머신(EVM)에서 실행되는 특정 스마트 컨트랙트가 일정시간 후 연산을 종료할지 아니면 멈추지 않고 계속해서 연산을 해나갈지 알 수 없다. 따라서 이더리움은 이더리움 가상머신(EVM) 상에서 특정 계약이 무기한 실행되어 한정된 연산력을 모두 소진해버리는 사태를 방지하기 위해 스마트 컨트랙트 코드를 실행시키는 경우 최대 허용 가능한 연산량을 설정해 놓도록 하는데 이는 최대 가스량(gas limit)으로 표현된다.
- 가스가 필요한 두 번째 이유는 자유시장(free market) 경제 시스템을 통해 이더리움의 한정된 자원인 연산력에 대한 수요와 공급을 조절하는 메커니즘을 제공하기 때문이다. 비트코인이 비트코인 블록체인의 한정된 자원인 블록 상의 공간을 사용하기 위해 거래 수수료를 지불하는 것처럼 이더리움 상에서는 이더리움의 한정된 자원인 연산력을 사용하기 위해 가스를 지불한다. 가스는 이더(ether)를 사용하여 구매해야 하는데 연산력에 대한 수요가 증가할수록 단위량의 가스를 구입하는데 드는 이더의 양이 늘어나며 수요가 감소하면 가스 구입에 필요한 이더의 양이 감소한다.
이더리움의 자체 토큰인 이더(ether)는 가스를 구입하는 용도로 사용된다. 6,000만 이더가 초기 크라우드 세일에 참여한 사람들에게 분배되었으며 이 중 20%인 1,200만 이더는 이더리움 파운데이션의 개발비용으로 책정되었다. 2017년 8월까지 약 9,400만 이더가 발행되었으며 매년 발행되는 양은 최대 1,800만 이더로 한정되어 있다. 비트코인이 총 발행량이 2,100만 비트코인으로 한정되어 있는 것과는 다르게 이더리움의 총 발행량은 정해져있지 않다. 이더리움은 현재 작업증명 방식의 합의 알고리즘에서 캐스퍼(Casper)라 불리는 지분증명(PoS: Proof of Stake) 방식의 합의 알고리즘으로 전환을 계획하고 있는데 이에 따라 이더의 발행량이 달라질 것이다.